package com.fancy.playlist.service;

import com.fancy.common.dto.PageResult;
import com.fancy.common.dto.PlaylistBasicInfo;
import com.fancy.common.dto.SongBasicInfo;
import com.fancy.playlist.dto.PlaylistDetailDTO;
import com.fancy.playlist.entity.Playlist;

import java.util.List;

public interface PlaylistService {

    /**
     * 创建播放列表
     */
    Long createPlaylist(Long userId, String playlistName, String description, String coverUrl, Boolean isPublic);

    /**
     * 获取播放列表详情
     */
    Playlist getPlaylistDetail(Long playlistId);

    /**
     * 更新播放列表信息
     */
    boolean updatePlaylist(Long playlistId, String playlistName, String description, String coverUrl, Boolean isPublic);

    /**
     * 删除播放列表
     */
    boolean deletePlaylist(Long playlistId, Long userId);

    /**
     * 获取用户播放列表
     */
    PageResult<Playlist> getUserPlaylists(Long userId, int page, int size);

    /**
     * 添加歌曲到播放列表
     */
    boolean addSongToPlaylist(Long playlistId, Long songId);

    /**
     * 从播放列表移除歌曲
     */
    boolean removeSongFromPlaylist(Long playlistId, Long songId);

    /**
     * 获取播放列表歌曲
     */
    List<Long> getPlaylistSongs(Long playlistId);

    /**
     * 获取播放列表歌曲详细信息
     */
    List<SongBasicInfo> getPlaylistSongsWithDetails(Long playlistId);

    /**
     * 获取播放列表基本信息 (供Feign调用)
     */
    PlaylistBasicInfo getPlaylistBasicInfo(Long playlistId);

    /**
     * 批量获取播放列表基本信息
     */
    List<PlaylistBasicInfo> getPlaylistBasicInfoBatch(List<Long> playlistIds);

    /**
     * 获取所有公开播放列表的标签
     */
    List<String> getAllPublicPlaylistTags();

    /**
     * 根据标签获取公开播放列表
     */
    PageResult<Playlist> getPublicPlaylistsByTag(String tag, int page, int size);

    /**
     * 获取播放列表详情（包含用户名）
     */
    PlaylistDetailDTO getPlaylistDetailWithUsername(Long playlistId);
}
